package com.slg.mybatis;

import com.mysql.jdbc.Driver;
import com.slg.mybatis.entity.Student;
import org.junit.Test;

import java.security.SecureRandom;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 * @Author: 小小张的小小施
 * @Date: 2024/1/23
 *
 *
 * JDBC使用的基本步骤：
 * 1、导包
 * 2、注册驱动
 * 3.获取连接
 * 4、获取statement对象
 * 5.编写sql  执行sql
 * 6、处理结果集
 * 7、释放资源
 *
 * JDBC操作数据库存在的不足：
 * 1、获取链接的步骤反锁
 * 2、释放资源过程繁琐
 * 3、处理结果集繁琐
 * 4、sql语句和java代码耦合
 * 5、搜索 条件  动态sql 字符串拼接
 * 6、查询大数据结果没有缓存
 *
 *
 * mybatis持久层框架 可以解决以上分析的问题
 *   MyBatis 是一款优秀的持久层框架 它支持自定义SQL、存储过程已经高级映射
 *   MyBatis 免除了几乎所有的JDBC代码已经设置和获取结果集的工作
 *   MyBatis 可以通过简单的XML 或注解来配置和映射原始类型，接口和Java  POJO（Plain Old Java Objects，普通老式Java对象）
 *   为数据库中的记录。
 *
 */
public class JDBCOperation {

    //jdbc实现数据的查询操作
    @Test
    public void testSelect(){
        try{
            Driver driver  =new Driver();
            DriverManager.registerDriver(driver);
            String username = "root";
            String password = "123456";

            String url = "jdbc:mysql:///java2323";
            Connection connection = DriverManager.getConnection(url,username,password);
            System.out.println("connection = " + connection);

            //获取执行sql语句的对象
            String sql  = "select * from student";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);

            //处理结果集
            ResultSet resultSet = preparedStatement.executeQuery();
            ArrayList<Student> students = new ArrayList<>();
            while (resultSet.next()){
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                int age  = resultSet.getInt("age");
                double weight  = resultSet.getDouble("weight");
                Student student = new Student(id,name,age,weight);
                students.add(student);
            }

            //打印结果集
            System.out.println("students = " + students);

            //释放资源
            resultSet.close();
            preparedStatement.close();
            connection.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }


    @Test
    public void testDelete(){
        try{
            Driver driver = new Driver();
            DriverManager.registerDriver(driver);
            String username = "root";
            String password = "123456";
            String url = "jdbc:mysql://java2323";
            Connection connection = DriverManager.getConnection(url,username,password);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
